﻿using System.Text;
using YookingFileIO.Class;
using YookingBizWQW.Class.Public;
using YookingInterfaceWeixin.Class.WxOfficial;
using YookingInterfaceWeixin.Class.WxPay;
using System;
using YookingInterfaceWeixin.Class.WxLogin;

namespace YookingBizWQW.Class.WeiXin
{
    public class clsWxCall
    {
        //注释：王庆文 2020年04月23日====================================================
        //为微信JSAPI调用准备AppID、时间戳、随机字符串、微信签名等数据json
        public string GetWxConfigInfo(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strAppID = "00000000"; //微信公众号AppId
            string strYKPageUrl = "test"; //客户端页面的URL

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 2)
            {
                strAppID = strArray[0];
                strYKPageUrl = strArray[1];
            }

            #endregion

            clsWxConfig myOffAcc = new clsWxConfig(); //得到微信签权数据
            strRtData = myOffAcc.GetWxConfigInfo(strAppID, strYKPageUrl);

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "wqw.txt", strRtData);

            return strRtData; //微信签权数据
        }

        //注释：王庆文 2018年08月28日============================================================================
        //先将APP用户的订单信息提交给微信，由微信服务器统一生成该笔订单APP端支付需要的json参数集合
        public string GetOrderWeixinData(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strAppID = "00000000";      //应用AppId
            string strOrderTitle = "微信订单"; //订单描述
            string strOrderID = "00000000";    //订单号
            string strAllFee = "0";            //交易金额
            string strTradeType = "APP";       //交易类型
            string strWxClientCode = "000000"; //客户端随机码

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 6)
            {
                strAppID = strArray[0];
                strOrderTitle = strArray[1];
                strOrderID = strArray[2];
                strAllFee = strArray[3];
                strTradeType = strArray[4];
                strWxClientCode = strArray[5];
            }

            #endregion

            clsUnifiedOrder myOrder = new clsUnifiedOrder(); //微信支付下单操作数据
            strRtData = myOrder.GetOrderWeixinData(strAppID, strOrderTitle, strOrderID, 
                                                   strAllFee, strTradeType, strWxClientCode);

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "wqw.txt", strRtData);

            return strRtData; //下单结果数据
        }

        //注释：王庆文 2018年08月31日=========================================================================
        //微信支付订单的查询操作，商户可以通过该接口主动查询订单状态，然后根据实际情况完成下一步的业务逻辑
        public string GetWxOrderPayInfo(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strAppID = "00000000"; //应用AppId
            string strOrderID = "000000"; //订单号

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 2)
            {
                strAppID = strArray[0];
                strOrderID = strArray[1];
            }

            #endregion

            clsOrderQuery myOrder = new clsOrderQuery(); //微信支付情况查询
            strRtData = myOrder.GetWxOrderPayInfo(strAppID, strOrderID);

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "GetWxOrderPayInfo.txt", strRtData);

            return strRtData; //订单查询结果
        }

        //注释：王庆文 2022年04月12日============================================================================
        //根据微信小程序端提供的code值，向微信服务器请求获取用户的openid、session_key、unionid等数据
        //应答结果实例：{"openid":"xxxx","session_key":xxxx,"unionid":"xxxx","errcode":"xxxx","errmsg":"xxxx"}
        public string GetWxMiniUserAuthInfo(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strWxAppID = "000000000000000"; //应用AppId
            string strWxClientAuthCode = "000000"; //微信小程序端wx.login得到的code值

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 2)
            {
                strWxAppID = strArray[0];
                strWxClientAuthCode = strArray[1];
            }

            #endregion

            clsWxUserInfo myUser = new clsWxUserInfo(); //微信用户openid等信息
            strRtData = myUser.GetWxMiniUserAuthInfo(strWxAppID, strWxClientAuthCode);

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "GetWxMiniUserAuthInfo.txt", strRtData);

            return strRtData; //微信授权信息获取结果
        }

        //注释：王庆文 2022年04月12日============================================================================
        //根据微信小程序端wx.login反馈回来的code值，在后台服务器端获取phone_info等包含手机号码的JSON数据
        // {
        //     "errcode":0,
        //     "errmsg":"ok",
        //     "phone_info": {
        //         "phoneNumber":"xxxxxx",      //用户绑定的手机号（国外手机号会有区号）
        //         "purePhoneNumber": "xxxxxx", //没有区号的手机号
        //         "countryCode": 86,           //区号
        //         "watermark": {
        //             "timestamp": 1637744274, //时间戳
        //             "appid": "xxxx"          //appid
        //         }
        //     }
        // }
        public string GetWxMiniUserPhoneNumber(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strWxAppID = "00000000000000"; //应用AppId
            string strWxClientNumCode = "000000"; //微信小程序端wx.login得到的code值

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 2)
            {
                strWxAppID = strArray[0];
                strWxClientNumCode = strArray[1];
            }

            #endregion

            clsWxUserInfo myUser = new clsWxUserInfo(); //微信用户手机号等信息
            strRtData = myUser.GetWxMiniUserPhoneNumber(strWxAppID, strWxClientNumCode);

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "GetWxMiniUserPhoneNumber.txt", strRtData);

            return strRtData; //微信用户手机号码信息集合
        }

        //注释：王庆文 2022年08月26日===========================================================================================
        //根据微信公众号H5端提供的code值，向微信服务器请求获取用户的openid、unionid、昵称、头像等数据
        //应答结果实例：{"openid":"xxxx","unionid":xxxx,"nickname":"xxxx","headimgurl":"xxxx""errcode":"xxxx","errmsg":"xxxx"}
        public string GetWxPubUserAuthInfo(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strWxAppID = "00000000000000"; //应用AppId
            string strWxPubClientCode = "000000"; //微信小程序端wx.login得到的code值

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 2)
            {
                strWxAppID = strArray[0];
                strWxPubClientCode = strArray[1];
            }

            #endregion

            clsWxUserInfo myUser = new clsWxUserInfo(); //微信H5用户昵称、头像等信息
            strRtData = myUser.GetWxPubUserAuthInfo(strWxAppID, strWxPubClientCode);

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "GetWxPubUserAuthInfo.txt", strRtData);

            return strRtData; //微信公众号H5用户的个人信息json数据集合
        }

        //注释：肖鑫 2022年07月26日==============================================================================
        //获取微信小程序二维码
        //strAppID：//小程序的appid值，如：strAppID = "wxb5334c0a7de6a90e";
        //strPageDir：
        //          页面 page，例如 pages/index/index，根路径前不要填加 /，
        //          不能携带参数（参数请放在 scene 字段里），如果不填写这个字段，默认跳主页面
        //strScene：
        //          最大32个可见字符，只支持数字，大小写英文以及部分特殊字符：!#$&'()*+,/:;=?@-._~，
        //          其它字符请自行编码为合法字符（因不支持%，中文无法使用 urlencode 处理，请使用其他编码方式）
        //strEnvVersion：//要打开的小程序版本。正式版为 release，体验版为 trial，开发版为 develop
        public string GetAppletQRCode(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strWxAppID = "00000000000000000"; //小程序的appid值
            string strPageDir = "pages/index/index"; //页面 page，例如 pages/index/index，根路径前不要填加 /
            string strScene = "0000000000000000000"; //最大32个可见字符，只支持数字，大小写英文以及部分特殊字符
            string strEnvVersion = "trial"; //要打开的小程序版本

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 4)
            {
                strWxAppID = strArray[0];
                strPageDir = strArray[1];
                strScene = strArray[2];
                strEnvVersion = strArray[3];
            }

            #endregion

            clsWxQrcode myQrcode = new clsWxQrcode(); //获取微信小程序二维码
            strRtData = myQrcode.GetAppletQRCode(strWxAppID, strPageDir, strScene, strEnvVersion);

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "GetAppletQRCode.txt", strRtData);

            return strRtData; //base64二维码数据生成结果
        }



    }
}
